Embodiments of the present invention relate to software applications and more specifically to a framework for enabling and managing customizations made to software applications.
Software applications often need to be customized to meet the specific needs of the end user. This is particularly true in the field of enterprise software, where each organization may have a unique set of business requirements and data integration needs. For example, a central IT department of an enterprise organization may develop an application for implementing an employee hiring process. The central IT department may then deploy the application to other departments within the organization. The departments receiving the application may however have to customize the application to suit their individual needs. For example, the process used by a Legal Department for hiring an attorney may be different from the process used by an Engineering Department for hiring an engineer. Accordingly, the Legal and the Engineering departments may each customize the application received from central IT according to their needs. The customizations made by the Legal Department may be further customized by individual legal offices. For example, a legal office in California may make customizations to meet California state requirements while a legal office in New York may make customizations to meet the state laws of New York. Accordingly, an application developed by the central IT department may be customized by one or more downstream customizers.
Application customizations are not limited to within an enterprise as described above. For example, a software vendor may develop an application for performing loan processing that may then be deployed to multiple customers such as various mortgage brokers at various different sites. Each broker may customize the application to fit the broker's needs. Further downstream customizations may be performed by downstream customizers.
Accordingly, a base application may be customized in different ways by one or more users (customizers) that are downstream from the originator or creator of the application (the application developer). These customizations however become difficult to manage.
Further, consider the situation when a new version of the base application is released by the application developer. Conventionally, upon receiving a new version of the base application, the downstream customizer has to expend a considerable amount of time and effort in re-implementing the customizations and retesting the customizations against the new version of the application. This process has to be repeated for each new release and becomes time consuming and expensive. In some instances, the application developer may implement predefined customizations directly in the base application. However, this greatly increases the complexity of the base application, resulting in higher development and maintenance costs. In addition, this approach restricts the downstream customizations that can be performed and is thus not flexible enough to address the diverse customization requirements of all the end users/customers of the application.
Various different standards are used for developing applications. One such standard is the Service Component Architecture (SCA) standard that provides a framework for assembling disparate enterprise Service Oriented Architecture (SOA) components into higher-level composite applications. SCA thus provides a framework for creating SOA applications. SCA was developed to simplify the development, deployment, and management of enterprise applications. The SCA specification provides rules/guidelines for development and deployment of applications. For example, the SCA specification defines how the various components/pieces of an application are created and assembled together as modular components. The components in SCA can be implemented using different technologies including Business Process Execution Language (BPEL), which provides a language for implementing business processes orchestrating various services, and Business Process Modeling Notation (BPMN), which is a graphical representation for specifying business processes in a workflow. While the SCA provides guidelines for assembling components into applications, it does not address problems associated with managing customizations to applications. Similarly, while BPEL provides a language for implementing business processes, it does not specify anything to manage the changes in the business processes.